Network congestion occurs when a router is carrying so much data that the router's quality of service deteriorates. This deterioration of service may include the router dropping packets. If endpoints use aggressive retransmissions to compensate for dropped packets, this may lead to a state where the routers continue dropping packets that were retransmitted and the endpoints continue retransmitting old packets, such that no useful work is accomplished. This state is known as “congestion collapse.”
Modern networks use congestion control and network congestion avoidance techniques to avoid congestion collapse. For example, endpoints utilizing Transmission Control Protocol/Internet Protocol (“TCP/IP”) maintain a congestion window for a connection with another endpoint. The sending endpoint uses the congestion window in determining the total number of unacknowledged packets/bytes that the sending endpoint may transmit into the network at any point during a flow of data transmitted across the connection.
Slow-start is a TCP/IP algorithm that includes starting with an initial congestion window of a small number of segments/packets. In response to receiving acknowledgements (“ACKs”), the congestion window grows exponentially until the congestion window size reaches the size of the receiver endpoint's advertised window or until a loss occurs. Once a loss is detected using the endpoints retransmission timer, the sending endpoint saves half of the current congestion window as a slow-start threshold and the slow-start algorithm begins again by sending data with its congestion window set to one segment. Once the congestion window reaches the slow-start threshold, the sending endpoint enters a congestion avoidance mode and ACKs result in a linear increase of the congestion window. In an alternate method, if the loss is detected via three duplicate acknowledgements being detected for the same packet, the congestion window is reduced to the value of slow-start threshold (i.e., ½ of the congestion window when the loss was detected) and the endpoint enters congestion avoidance.
Both recovery algorithms result in a dramatic decrease in congestion window size in response to packet loss. Additionally, these algorithms increase the congestion window slowly when ramping back up after a packet loss. This slow rate of increasing the congestion window is especially apparent for connections with a long round trip time (the length of time it takes for a packet to be sent plus the length of time it takes for an acknowledgment of that packet to be received). The abrupt decreases and slow increases in congestion window size and the reliance upon packet loss to determine when to stop increasing the congestion window are inefficient congestion controls.
Network Working Group Request for Comments 4782, Quick-Start for TCP and IP, authored by Sally Floyd, Mark Allman, Amit Jain, and Pasi Sarolahti in January 2007 (“Quick-Start”) describes the sending endpoint negotiating an initial congestion window with routers along the network path to a receiving endpoint. Endpoints, and not the routers, are able to initiate the negotiation of the congestion window. Routers along the network path may only decrease the requested initial rate set by an endpoint. While Quick-Start uses this negotiation to avoid slow-start's initial ramp up of the congestion window until packet loss occurs, the endpoints use the recovery algorithms described above once packet loss does occur. Additionally, the endpoints may only initiate the negotiation of the congestion window at the start of a data transfer or after an idle period.